/** @format */

import { defineStore } from 'pinia'

// 导入 登录、获取用户信息 接口函数
import { loginApi, getUserInfoApi } from '@/api/user'

// 导入本地存储管理token的函数
import { setToken, getToken, removeToken } from '@/utils/token'

// 定义并导出
export const useUserStore = defineStore('user', {
	// 定义共享的数据源
	state: () => ({
		// 调用 getToken() 函数目的是实现 token 的持久化，让 pinia 中的 token 刷新不丢失
		token: getToken() || '',
		// 用户信息
		userInfo: {}
	}),
	// 修改数据的函数
	actions: {
		// 设置 token
		setToken(token) {
			// 给 pinia 中的 token 赋值
			this.token = token
			// 在本地存储中保存一份
			setToken(token)
		},
		// 设置用户信息
		setUserInfo(userInfo) {
			this.userInfo = userInfo
		},
		// 登录
		async loginAction(loginForm) {
			// 发起登录请求(调用登录接口)
			// await 只能获取成功态的 Promise 实例结果
			const resp = await loginApi(loginForm)
			// 解构出 token
			const { token } = resp
			// 对 token 赋值
			this.setToken(token)
		},
		// 获取用户信息
		async getUserInfoAction() {
			try {
				// 发请求（调用接口函数）
				const userInfo = await getUserInfoApi()
				// 设置 userInfo
				this.setUserInfo(userInfo)
			} catch (e) {}
		},
		// 退出
		logout() {
			this.token = ''
			removeToken()

			this.userInfo = {}
		}
	}
})
